package cl.loso.melon.server.persistencia;

import java.util.List;
import javax.jdo.PersistenceManager;
import javax.jdo.Query;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import cl.loso.melon.server.gae.PMF;
import cl.loso.melon.server.model.UsuarioLVS;

public class UsuarioLVSDAO {
	private static Log log = LogFactory.getLog(UsuarioLVSDAO.class);

	@SuppressWarnings("unchecked")
	public static List<UsuarioLVS> obtener() {
		PersistenceManager pm = PMF.get().getPersistenceManager();
		List<UsuarioLVS> usuarioLst = null;
		Query query = null;
		try {
			query = pm.newQuery(UsuarioLVS.class);
			query.setOrdering("nombres ASC");// DESC
			usuarioLst = (List<UsuarioLVS>) pm
					.detachCopyAll((List<UsuarioLVS>) query.execute());
		} catch (Exception e) {
			log.error(e.getMessage());
		} finally {
			pm.close();
		}
		return usuarioLst;
	}

	/*
	@SuppressWarnings("unchecked")
	public static List<UsuarioSinVisita> obtenerUsuariosSinVistas() {
		PersistenceManager pm = PMF.get().getPersistenceManager();
		List<UsuarioLVS> usuarioLst = null;
		List<UsuarioSinVisita> usuarioLst2 = null;
		Query query = null;
		try {
			query = pm.newQuery(UsuarioLVS.class);
			query.setOrdering("nombres ASC");// DESC
			usuarioLst = (List<UsuarioLVS>) query.execute();
			usuarioLst2 = new ArrayList<UsuarioSinVisita>();
			for (UsuarioLVS u : usuarioLst) {
				if (u.getVisitas().size() == 0) {
					Long idCargo=u.getIdCargo();
					Long idGerencia=u.getGerencia();
					Long idNegocioUsuario=u.getNegocio();
					String cargo="";
					String gerencia="";
					String negocioUsuario="";

					if(idNegocioUsuario!=null){
						if(idNegocioUsuario.longValue()!=0){
						negocioUsuario=((NegocioLVS)NegocioLVSBO
					.editarNegocio(idNegocioUsuario)).getNombre();
						} 
					}

					if(idCargo!=null){
						if(idCargo.longValue()!=0){
						cargo=((CargoLVS)CargoLVSDAO.getCargobyId(idCargo)).getNombre();
						}else{
							cargo="sin cargo asignado";
						}
					}
					
					if(idGerencia!=null){
						if(idGerencia.longValue()!=0){
						gerencia=((GerenciaLVS)GerenciaLVSDAO.getGerenciabyId(idGerencia)).getNombre();
						}else{
							gerencia="sin gerencia asignada";
						}
						
					}

					usuarioLst2.add(new UsuarioSinVisita(u.getNombres() + " " +
							u.getApepa(),
							negocioUsuario,
							cargo,
							gerencia
							));

				}
			}
			// pm.detachCopy(usuarioLst);
		} catch (Exception e) {
			log.error(e.getMessage());
		} finally {
			pm.close();
		}
		return usuarioLst2;
	}
	*/

	public static void insertar(String nombres, String apepa, String apema,
			String email, char perfil, String cargo, Long meta, Long idNegocio,
			Long idGerencia,Long idCargo) {

		PersistenceManager pm = PMF.get().getPersistenceManager();
		try {
			UsuarioLVS usuario = new UsuarioLVS(nombres, apepa, apema, email,
					perfil, cargo, meta, idNegocio, idGerencia,idCargo);
			pm.makePersistent(usuario);
		} catch (Exception e) {
			log.error(e.getMessage());
		} finally {
			pm.close();
		}
	}

	public static UsuarioLVS getUsuarioLVSbyId(Long id) {
		PersistenceManager pm = PMF.get().getPersistenceManager();
		UsuarioLVS usuario, detached = null;
		try {
			usuario = pm.getObjectById(UsuarioLVS.class, id);
			detached = pm.detachCopy(usuario);
		} catch (Exception e) {
			log.error(e.getMessage());
		} finally {
			pm.close();
		}
		return detached;

	}

	@SuppressWarnings("unchecked")
	public static void actualizarGerencia(Long idGerencia) {
		PersistenceManager pm = PMF.get().getPersistenceManager();
		List<UsuarioLVS> usuarioLst = null;
		Query query = null;
		try {
			query = pm.newQuery(UsuarioLVS.class);
			query.setFilter("gerencia == :1");
			usuarioLst = (List<UsuarioLVS>) query.execute(idGerencia);

			for (UsuarioLVS u : usuarioLst) {
				u.setGerencia((long) 0);
			}
		} catch (Exception e) {
			log.error(e.getMessage());
		} finally {
			pm.close();
		}

	}

	public static void actualizar(Long id, String nombres, String apepa,
			String apema, String email, char perfil, String cargo, Long meta,
			Long idNegocio, Long idGerencia,Long idCargo) {
		PersistenceManager pm = PMF.get().getPersistenceManager();
		try {
			UsuarioLVS usuario = pm.getObjectById(UsuarioLVS.class, id);
			usuario.setNombres(nombres);
			usuario.setApepa(apepa);
			usuario.setApema(apema);
			usuario.setEmail(email);
			usuario.setPerfil(perfil);
			usuario.setCargo(cargo);
			usuario.setMeta(meta);
			usuario.setNegocio(idNegocio);
			usuario.setGerencia(idGerencia);
			usuario.setIdCargo(idCargo);
		} catch (Exception e) {
			log.error(e.getMessage());
		} finally {
			pm.close();
		}

	}

	public static void borrar(Long id) {
		PersistenceManager pm = PMF.get().getPersistenceManager();
		try {
			pm.deletePersistent(pm.getObjectById(UsuarioLVS.class, id));
		} catch (Exception e) {
			log.error(e.getMessage());
		} finally {
			pm.close();
		}

	}

	@SuppressWarnings("unchecked")
	public static List<UsuarioLVS> buscarUsuarioPorNombre(String usuario) {
		PersistenceManager pm = PMF.get().getPersistenceManager();
		Query query = null;
		List<UsuarioLVS> usuarioLst = null;
		try {
			query = pm.newQuery(UsuarioLVS.class);
			query.setFilter("nombres >= :1 && nombres < :2");
			usuarioLst = (List<UsuarioLVS>) pm
					.detachCopyAll((List<UsuarioLVS>) query.execute(usuario
							.toLowerCase(), (usuario.toLowerCase() + "\ufffd")));

		} catch (Exception e) {
			log.error(e.getMessage());
		} finally {
			pm.close();
		}
		return usuarioLst;
	}

	@SuppressWarnings("unchecked")
	public static List<UsuarioLVS> buscarUsuarioPorEmail(String pemail) {
		PersistenceManager pm = PMF.get().getPersistenceManager();
		List<UsuarioLVS> detached = null;

		try {
			Query query = pm.newQuery(UsuarioLVS.class, "email == pemail");
			query.declareParameters("String pemail");

			detached = (List<UsuarioLVS>) pm
					.detachCopyAll((List<UsuarioLVS>) query.execute(pemail));

		} catch (Exception e) {
			log.error(e.getMessage());
		} finally {
			pm.close();
		}
		return detached;

	}

	@SuppressWarnings("unchecked")
	public static List<UsuarioLVS> buscarUsuarioPorNegocio(Long negocio) {
		PersistenceManager pm = PMF.get().getPersistenceManager();
		List<UsuarioLVS> detached = null;

		try {
			Query query = pm.newQuery(UsuarioLVS.class, "negocio == pnegocio");
			query.declareParameters("Long pnegocio");

			detached = (List<UsuarioLVS>) pm
					.detachCopyAll((List<UsuarioLVS>) query.execute(negocio));

		} catch (Exception e) {
			log.error(e.getMessage());
		} finally {
			pm.close();
		}
		return detached;

	}

	@SuppressWarnings("unchecked")
	public static List<UsuarioLVS> buscarUsuarioPorGerencia(Long gerencia) {
		PersistenceManager pm = PMF.get().getPersistenceManager();
		List<UsuarioLVS> detached = null;

		try {
			Query query = pm
					.newQuery(UsuarioLVS.class, "gerencia == pgerencia");
			query.declareParameters("Long pgerencia");

			detached = (List<UsuarioLVS>) pm
					.detachCopyAll((List<UsuarioLVS>) query.execute(gerencia));

		} catch (Exception e) {
			log.error(e.getMessage());
		} finally {
			pm.close();
		}
		return detached;

	}
}
